{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 泰坦尼克号生存者预测\n",
    "\n",
    "根据乘客属性，预测什么样的人能够在泰坦尼克号沉没时生存下来\n",
    "\n",
    "## 数据集说明\n",
    "\n",
    "* train：训练集，标签列为Suvived\n",
    "* test：测试集\n",
    "* gender_submission：测试集标签\n",
    "\n",
    "## 字段说明\n",
    "\n",
    "* PassengerId：\t乘客编号\t1-891\n",
    "* Survived：\t生还情况\t0, 1 0 = No, 1 = Yes\n",
    "* Pclass：\t票的等级\t1,2,3 1 = 1st, 2 = 2nd, 3 = 3rd\n",
    "* Name：\t乘客姓名\tBraund, Mr. Owen Harris\n",
    "* Sex：\t性别\tmale，female\n",
    "* Age：\t年龄\t数字，有缺失值\n",
    "* SibSp：\t兄弟姐妹/配偶在船上\t0-8 of siblings / spouses aboard the Titanic\t\n",
    "* Parch：\t父母/子女在船上\t0-6 of parents / children aboard the Titanic\t\n",
    "* Ticket：\t船票编号\tA/5 21171\n",
    "* Fare：\t票价\t7.25\n",
    "* Cabin：\t船舱号\tC85，有缺失值\n",
    "* Embark：\t登船港\tS,C,Q Port of Embarkation\tC = Cherbourg, Q = Queenstown, S = Southampton\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理\n",
    "\n",
    "* 缺失值处理：Age,Cabin\n",
    "* one-hot编码：Pclass,Embarked"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from IPython import display"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "train = pd.read_csv('./data/train.csv')\n",
    "\n",
    "train_lable = train['Survived'].values.reshape(len(train),1)\n",
    "train = train[[  'Pclass', 'Sex', 'Age', 'SibSp','Parch',  'Fare', 'Cabin', 'Embarked']]\n",
    "\n",
    "train['Sex'] = [1 if x == 'male' else 0 for x in train.Sex]\n",
    "train['Age'] = train['Age'].fillna(train['Age'].mean())\n",
    "train['Cabin'] = pd.factorize(train.Cabin)[0]\n",
    "\n",
    "train.fillna(0,inplace=True) \n",
    "train = pd.get_dummies(train,columns=['Pclass','Embarked'])  # 独热编码\n",
    "del train['Embarked_0']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "test = pd.read_csv('./data/test.csv')\n",
    "\n",
    "test = test[[ 'Pclass', 'Sex', 'Age', 'SibSp','Parch',  'Fare', 'Cabin', 'Embarked']]\n",
    "\n",
    "test['Sex'] = [1 if x == 'male' else 0 for x in test.Sex]\n",
    "test['Age'] = test['Age'].fillna(train['Age'].mean())\n",
    "test['Cabin'] = pd.factorize(test.Cabin)[0]\n",
    "\n",
    "test.fillna(0,inplace=True) \n",
    "test = pd.get_dummies(test,columns=['Pclass','Embarked'])  # 独热编码\n",
    "\n",
    "test_lable =  pd.read_csv('./data/gender_submission.csv')\n",
    "test_lable = test_lable['Survived'].values.reshape(len(test),1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 搭建神经网络"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\Anaconda3\\lib\\site-packages\\h5py\\__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "\n",
    "x = tf.placeholder('float',shape=[None,12])\n",
    "y = tf.placeholder('float',shape=[None,1])\n",
    "\n",
    "weight = tf.Variable(tf.random_normal([12,1]))\n",
    "bias  = tf.Variable(tf.random_normal([1]))\n",
    "ouput = tf.matmul(x,weight)+bias\n",
    "pred = tf.cast(tf.sigmoid(ouput)>0.5,tf.float32)\n",
    "\n",
    "loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y,logits=ouput))\n",
    "\n",
    "train_step = tf.train.GradientDescentOptimizer(0.0003).minimize(loss)\n",
    "accuracy = tf.reduce_mean(tf.cast(tf.equal( pred,y),tf.float32))\n",
    "\n",
    "sess = tf.Session()\n",
    "writer = tf.summary.FileWriter(\"logs/\", sess.graph)\n",
    "sess.run(tf.global_variables_initializer())\n",
    "\n",
    "loss_train = []\n",
    "train_acc = []\n",
    "test_acc = []\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.46485993 0.7912088 0.93779904\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x193df6c0898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1924c9352e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in range(25000):\n",
    "    index = np.random.permutation(len(train_lable))\n",
    "    train = train.iloc[index]\n",
    "    train_lable = train_lable[index]\n",
    "    for n in range(len(train)//100+1):\n",
    "        batch_xs = train[n*100:n*100+300]\n",
    "        batch_ys = train_lable[n*100:n*100+300]\n",
    "        sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})\n",
    "    if i%1000 == 0:\n",
    "        loss_temp = sess.run(loss,feed_dict={x:batch_xs,y:batch_ys})\n",
    "        loss_train.append(loss_temp)\n",
    "        train_acc_temp = sess.run(accuracy,feed_dict={x:batch_xs,y:batch_ys})\n",
    "        train_acc.append(train_acc_temp)\n",
    "        test_acc_temp = sess.run(accuracy,feed_dict={x:test,y:test_lable})\n",
    "        test_acc.append(test_acc_temp)\n",
    "        display.clear_output(wait=True)\n",
    "        print(loss_temp,train_acc_temp,test_acc_temp)\n",
    "        plt.plot(loss_train,'k-')\n",
    "        plt.title('train loss')\n",
    "        plt.show()\n",
    "        plt.plot(train_acc,'b-',label='train_acc')\n",
    "        plt.plot(test_acc,'r-',label='test_acc')\n",
    "        plt.title('train&test accuracy')\n",
    "        plt.legend()\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.plot(loss_train,'k-')\n",
    "plt.title('train loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.plot(train_acc,'b-',label='train_acc')\n",
    "plt.plot(test_acc,'r-',label='test_acc')\n",
    "plt.title('train&test accuracy')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
